﻿using RabbitMQ.Client;
using System;
using System.Text;
using System.Xml.Linq;

namespace 生产者
{
    class Program
    {
        static void Main(string[] args)
        {
            IConnectionFactory factory = new ConnectionFactory//创建连接工厂对象
            {
                HostName = "192.168.137.101",//IP地址
                Port = 5672,//端口号
                VirtualHost = "jet-test",
                UserName = "admin",//用户账号
                Password = "123456"//用户密码
            };
            try
            {
                IConnection con = factory.CreateConnection();//创建连接对象
                IModel channel = con.CreateModel();//创建连接会话对象
                string queueName = "queue1";  //声明一个队列
                channel.QueueDeclare(
                      queue: queueName,//消息队列名称
                      durable: false,//是否持久化,true持久化,队列会保存磁盘,服务器重启时可以保证不丢失相关信息。
                      exclusive: false,//是否排他,true排他的,如果一个队列声明为排他队列,该队列仅对首次声明它的连接可见,并在连接断开时自动删除.
                      autoDelete: false//是否自动删除。true是自动删除。自动删除的前提是：致少有一个消费者连接到这个队列，之后所有与这个队列连接的消费者都断开时,才会自动删除.
                                       //arguments: arg //一般设置为null，设置队列的一些其它参数,比如存活时间
                   );
                string str = "";
                do
                {
                    Console.WriteLine("发送内容:");
                    str = Console.ReadLine();

                    channel.ConfirmSelect();

                    //消息内容
                    byte[] body = Encoding.UTF8.GetBytes(str);//发送消息
                    channel.BasicPublish("", queueName, null, body);
                    if (channel.WaitForConfirms())
                    {
                        Console.WriteLine("真的成功了！");
                        channel.BasicAck(1, true);
                    }

                    Console.WriteLine("成功发送消息:" + str);
                } while (str.Trim().ToLower() != "q!");
                con.Close();
                channel.Close();
            }
            catch (Exception ex)
            {

                throw;
            }
           

            Console.WriteLine("Hello World!");
        }
    }
}
